---@meta

---------------------------------------------------------------
-- 请参考下表来写/Please refer to the table below for writing --
---------------------------------------------------------------
-- local dishes = {} -- 键为料理名的料理定义表
-- dishes.dish_mymod_dish1 = {
--     test = function(cooker, names, tags) -- 料理的测试函数，条件进行数值比较前必须判空
--         -- @param cooker string 烹饪锅的prefab名
--         return ((names.potato and names.potato >= 2) and (tags.veggie and tags.veggie > 0) or
--                 ((names.potato or 0) + (names.potato_cooked or 0)) >= 2 and tags.veggie) and
--                 names.honey and not tags.meat
--     end,
--     weight = 10, -- 食谱权重
--     priority = 6, -- @Runar: 料理优先级，严格的测试函数配合设定合理的料理优先级才能铸就好的料理。无端99还条件简单的无疑是给自己和其他模组添麻烦
--     foodtype = FOODTYPE.VEGGIE, -- 食物类型
--     perishtime = 3, --腐烂时间/天
--     hunger = 1,
--     sanity = 1,
--     health = 1,
--     cooktime = 10, -- 烹饪时间/s
--     floater = {'med', nil, 0.55}, -- 设置料理漂浮水面的数据
--     potlevel = "low", -- 动画在烹饪锅的位置高低,建议一个mod中所有料理固定一个值
--     -- prefabs = {}, -- 该料理被注册为预制物之前需要先加载的预制物
--     -- tags = { "honeyed" }, -- 将被添加到预制物的tags
--     -- oneat_desc = "juice!", -- 烹饪指南中会显示的描述语
--     oneatenfn = function(inst, eater) -- 食用后执行的函数，在此实现buff
--         eater:AddDebuff("buff_electricattack", "buff_electricattack")
--     end,
--     card_def = {ingredient = {{ "potato", 2 }, { "honey", 2 }}}, -- 将生成对应的食谱卡
--     -- imagename = "honeyedpotato", -- 贴图,不写则用prefab名
--     -- atlasname = "images/inventoryimages/honeyedpotato.xml" -- 图集,不写则用inventoryimages
--     -- cookbook_tex = "honeyedpotato", -- 烹饪指南中显示的图片名,不写则用prefab名
--     -- cookbook_atlas = "images/cookbookimages/honeyedpotato.xml", -- 烹饪指南中显示的图片图集,不写则用inventoryimages

--     -- isMasterfood = true, -- 是否大厨料理
--     -- maxstacksize = 40, -- 最大堆叠数量
--     -- onperishreplacement = nil, -- 腐烂产物，默认为腐烂物
--     -- perishfn = nil, -- 腐烂时的回调函数

-- }
-- for k, v in pairs(dishes) do
--     v.name = k -- 设置料理名
--     v.basename = k -- 设置调味料理基础名
--     v.weight = v.weight or 1 -- 设置料理权重
--     v.priority = v.priority or 0 -- 设置料理优先级
--     v.perishtime = v.perishtime*480
--     v.cooktime = v.cooktime/40
--     v.potlevel = v.potlevel or 'low' -- 贴图相对位置 
--     v.overridebuild = v.overridebuild or k -- 设置料理锅上动画（贴图）所在的build压缩包（有时build名不一定为压缩包名）
--     v.floater = v.floater or { "small", .05, .7 } -- 设置料理漂浮数据
--     v.mod = true -- 确定为模组料理便于本模组内进行调味处理，换个名也可
--     v.cookbook_tex = v.cookbook_tex or k -- 烹饪指南tex名，不设置则为prefab名
--     v.cookbook_atlas = v.cookbook_atlas or ("images/inventoryimages/" .. k .. ".xml") -- 烹饪指南图集
--     -- v.cookbook_catogory = "mod" -- 料理在烹饪指南中所处的目录。后续定义中被确认为模组料理，写了大概率不生效
--     v.imagename = v.imagename or k -- 用于prefab中设置贴图名
--     v.atlasname = v.atlasname or ("images/inventoryimages/" .. k .. ".xml") -- 用于指定库存贴图图集
--     v.oneat_desc = v.oneat_desc or STRINGS.NAMES[string.upper(k)] or k -- 添加描述
-- end

---@alias data_dish table<string, single_dish> # 料理数据表

---@class single_dish # 料理数据
---@field test fun(potprefab:string,names:table,tags:dish_tags):boolean
---@field weight number # 权重
---@field priority number # 优先级 @Runar: 料理优先级，严格的测试函数配合设定合理的料理优先级才能铸就好的料理。无端99还条件简单的无疑是给自己和其他模组添麻烦
---@field foodtype any # 食物类型
---@field perishtime number # 腐烂时间/天
---@field hunger number # 饥饿度
---@field sanity number # 精神
---@field health number # 生命
---@field cooktime number # 烹饪时间/s
---@field floater prefab_floater # 漂浮水面数据表
---@field potlevel string|nil # 动画在烹饪锅的位置高低,建议一个mod中所有料理固定一个值
---| 'low'
---| 'med'
---| 'high'
---@field tags string[]|nil # 将被添加到预制物的tags
---@field oneat_desc string|nil # 吃的时候的描述
---@field oneatenfn fun(inst:ent,eater:ent)|nil # 食用后执行的函数，在此实现buff
---@field card_def dish_card_def|nil # 食谱小卡片
---@field imagename string|nil # 贴图,不写则用prefab名
---@field atlasname string|nil # 图集路径,不写则用inventoryimages
---@field cookbook_tex string|nil # 烹饪指南中显示的图片名,不写则用prefab名
---@field cookbook_atlas string|nil # 烹饪指南中显示的图片图集,不写则用inventoryimages
---@field isMasterfood boolean|nil # 是否大厨料理
---@field maxstacksize number|nil # 最大堆叠数量
---@field onperishreplacement string|nil, # 腐烂产物，默认为腐烂物
---@field perishfn function|nil # 腐烂时的回调函数
---@field name string|nil # 料理名
---@field basename string|nil # 设置调味料理基础名
---@field overridebuild string|nil # 设置料理锅上动画（贴图）所在的build压缩包（有时build名不一定为压缩包名）
---@field mod boolean|nil # 确定为模组料理便于本模组内进行调味处理，换个名也可
---@field lan dish_custom_attr # 自定义

---@class dish_tags
---@field dairy number|nil # 乳制品度
---@field decoration number|nil # 装饰度
---@field egg number|nil # 蛋度
---@field fat number|nil # 油脂度
---@field fish number|nil # 鱼度
---@field fruit number|nil # 水果度
---@field inedible number|nil # 不可食用度
---@field magic number|nil # 魔法度
---@field meat number|nil # 肉度
---@field monster number|nil # 怪物度
---@field seed number|nil # 种子度
---@field sweetener number|nil # 甜味剂度
---@field veggie number|nil # 蔬菜度

---@class prefab_floater table # 漂浮数据
---@field [1] prefab_floater_size # 漂浮大小
---@field [2] number|nil # 偏移
---@field [3] number|nil # 缩放比

---@alias prefab_floater_size
---| 'small' # 小
---| 'med' # 中
---| 'large' # 大

---@class dish_card_def # 菜谱卡定义
---@field ingredient table<string,number>[]


---@class dish_custom_attr # 自定义料理属性表
---@field noedible boolean|nil # 没有edible组件
---@field nostackable boolean|nil # 没有堆叠组件
---@field noperishable boolean|nil # 没有新鲜度组件
---@field nospiced boolean|nil # 不能调味

